package com.kexio.enterprise.integration.notification.domain;

import com.kexio.enterprise.integration.notification.enums.NotificationPriority;
import com.kexio.enterprise.integration.notification.enums.NotificationStatus;
import com.kexio.enterprise.integration.notification.enums.NotificationType;

import java.time.LocalDateTime;
import java.util.Map;

/**
 * 用户通知
 * 
 * @author Kexio
 * @since 1.0.0
 */
public class UserNotification {
    private String notificationId;
    private Long userId;
    private NotificationType type;
    private NotificationPriority priority;
    private String title;
    private String content;
    private String summary;
    private String iconUrl;
    private String actionUrl;
    private Map<String, Object> data;
    private NotificationStatus status;
    private LocalDateTime createTime;
    private LocalDateTime readTime;
    private LocalDateTime expireTime;
    private Map<String, String> tags;

    public UserNotification() {
        this.notificationId = java.util.UUID.randomUUID().toString();
        this.priority = NotificationPriority.NORMAL;
        this.status = NotificationStatus.PENDING;
        this.createTime = LocalDateTime.now();
    }

    // Getters and Setters
    public String getNotificationId() { return notificationId; }
    public void setNotificationId(String notificationId) { this.notificationId = notificationId; }
    
    public Long getUserId() { return userId; }
    public void setUserId(Long userId) { this.userId = userId; }
    
    public NotificationType getType() { return type; }
    public void setType(NotificationType type) { this.type = type; }
    
    public NotificationPriority getPriority() { return priority; }
    public void setPriority(NotificationPriority priority) { this.priority = priority; }
    
    public String getTitle() { return title; }
    public void setTitle(String title) { this.title = title; }
    
    public String getContent() { return content; }
    public void setContent(String content) { this.content = content; }
    
    public String getSummary() { return summary; }
    public void setSummary(String summary) { this.summary = summary; }
    
    public String getIconUrl() { return iconUrl; }
    public void setIconUrl(String iconUrl) { this.iconUrl = iconUrl; }
    
    public String getActionUrl() { return actionUrl; }
    public void setActionUrl(String actionUrl) { this.actionUrl = actionUrl; }
    
    public Map<String, Object> getData() { return data; }
    public void setData(Map<String, Object> data) { this.data = data; }
    
    public NotificationStatus getStatus() { return status; }
    public void setStatus(NotificationStatus status) { this.status = status; }
    
    public LocalDateTime getCreateTime() { return createTime; }
    public void setCreateTime(LocalDateTime createTime) { this.createTime = createTime; }
    
    public LocalDateTime getReadTime() { return readTime; }
    public void setReadTime(LocalDateTime readTime) { this.readTime = readTime; }
    
    public LocalDateTime getExpireTime() { return expireTime; }
    public void setExpireTime(LocalDateTime expireTime) { this.expireTime = expireTime; }
    
    public Map<String, String> getTags() { return tags; }
    public void setTags(Map<String, String> tags) { this.tags = tags; }
}
